package com.zf.mapstruct.converter;

import com.zf.mapstruct.entity.StudentInfo;
import com.zf.mapstruct.vo.StudentInfoVO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingConstants;

/**
 * MAPSTRUCT映射器，自动生成实现类，根据getter,setter方法设置属性。
 * 若指定(componentModel = MappingConstants.ComponentModel.SPRING)则会作为bean注入到spring容器中,
 * 默认情况下需要通过 Mappers.getMapper(Mapper.Class) 获取实例
 * 直接注入使用即可
 *
 */
@Mapper(componentModel = MappingConstants.ComponentModel.SPRING)
public interface StudentInfoConverter {

    /**
     * 其他不指定映射规则的属性，则自动按照名称映射
     */
    @Mapping(target = "young", constant = "true") // 常量值，不需要原始值
    @Mapping(source = "age", target = "age", defaultValue = "18") // 默认值，当原始值不存在时，则赋默认值
    @Mapping(target = "className", ignore = true) // 忽略
    @Mapping(source = "fatherBirthday", target = "fatherBirthday", dateFormat = "yyyy-MM-dd") // 指定日期格式，日期转字符串
    @Mapping(source = "motherBirthday", target = "motherBirthday", dateFormat = "yyyy-MM-dd") // 指定日期格式，字符串转日期
    @Mapping(target = "finishSchool", expression = "java(java.util.Optional.ofNullable(studentInfo.getStudyAge()).orElse(0) >= 4 ? \"Y\": \"N\")") // java表达式
    StudentInfoVO toCustomVo(StudentInfo studentInfo);
}
